会话接入功能介绍

会话接入的目的是帮助开发者的组件对接三方的账户系统,尤其是当开发者的组件寄生于使用方的环境(如APP)时,使用其会话作为账户识别。

举例来说,一个完整的会话接入的过程是这样的:

  1. 开发者A开发组件a,并上线
  2. 券商B购买组件a,并生成实例inst_a
  3. 券商B将inst_a集成到自己的app中,并希望使用自己的账户系统来使用组件a(实例inst_a)的功能
  4. 开发者A发起会话接入登记,将access_secret登记在light平台
  5. 券商B按照会话接入的流程做简单接口适配(适配的流程见后文)
  6. 开发者A在组件a上引入LightSDK,使用LightSDK获取会话信息

至此,可以完成一个组件的会话接入过程,下面为大家详细说明一下会话接入方案的设计原理和使用方式。

原理

账户接入流程

  1. 生成并跳转免登URL

    已经登录的应用通过账户提供方的后端服务接口,传入需要打开的实例id及当前用户的open_id(也可从会话中获取),由接入方服务组织请求参数生成免登url。

    应用跳转到服务端生成的免登url,携带用户信息和签名串。

  2. Light平台校验签名并截取用户信息置换为access_token

    平台根据请求参数找出登记在平台的access_secret,对签名做校验,校验通过后将请求跳转到对应的实例url并携带access_token返回。

  3. 实例通过lightSDK获取用户信息

    已经登录的实例可以使用LightSDK获取用户的信息。

免登URL接口说明

免登URL由应用的开发方根据当前用户的open_id生成,并由客户端应用请求到light服务器( 接口地址 ),light服务器会校验签名的有效性,并根据参数中的inst_id(实例ID)将请求302到真实的实例url上同时携带access_token返回。

免登url在生成后5分钟(可配置)内使用有效。

一次登录的有效期时间可在平台中配置。

接口地址

https://api.lightyy.com/account/v1/auth_check

参数列表

参数 是否必须 参数类型 限制长度 参数说明
open_id Y String 32 Open_id
timestamp Y Long 20 时间戳
nick_name Y String 100 昵称
sign Y String 32 签名
inst_id Y String 32 实例ID
province N String 20 省份: 如Zhejiang
city N String 20 城市如Hangzhou
sex N String 1 性别0-女 1-男
avatar N String 100 头像地址url
qq N String 20 QQ号码
mobile_tel N String 255 手机号

签名规则

md5签名的原理如下: 将所有的参数值与access_secret,user_agent按参数名升序进行排列,其中access_secret由账户提供方持有并登记在light平台,应严格保密;user_agent从客户端请求的请求头中读取(目的是保证请求在限制的客户端中使用),access_secret,user_agent都不能出现在请求参数中。

  1. Md5(value1+value2+...access_secret...+...user_agent...+valueN)
  2. access_secret在签名中的顺序取决于他在所有参数名中的顺序。
  3. user_agent在签名中的顺序也取决于他在所有参数名中的顺序。

例子:

  1. 参与签名的参数列表

    { nick_name: ‘testuser-0’,
    avatar: ‘htps://ss0.bdstatic.com/5aV1bjqh_Q23odCf/static/superman/img/logo/bd_logo1_31bdc765.png’,
    inst_id: ‘2760’,
    open_id: ‘0’,
    access_secret: ‘7cdf989959d357b75cc52a449a2bd79a’,
    user_agent: ‘Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.71 Safari/537.36’,
    timestamp: 1478825018946 }

  2. 按照参数名升序后

    [“access_secret”,”avatar”,”inst_id”,”nick_name”,”open_id”,”timestamp”,”user_agent”]

  3. 最终待签名字符串
    7cdf989959d357b75cc52a449a2bd79ahtps://ss0.bdstatic.com/5aV1bjqh_Q23odCf/static/superman/img/logo/bd_logo1_31bdc765.png2760testuser-001478825018946Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.71 Safari/537.36

  4. 最终生成的免签url地址
    htps://api.lightyy.com/account/v1/auth_check?nick_name=testuser-0&avatar=htps://ss0.bdstatic.com/5aV1bjqh_Q23odCf/static/superman/img/logo/bd_logo1_31bdc765.png&inst_id=2760&open_id=0&timestamp=1478825018946&sign=8fc2a2fdb69505896ceb5bcb93edc1bd

注意:

签名验证时,必须遍历request请求中的所有参数,进行签名验证。开发者在验证请求时,务必对所有参数进行遍历,全部加入签名验证数据中。

关于access_secret

access_secret由账户的提供方持有并登记到light平台。

用户信息获取SDK使用说明

使用会话接入功能的组件可以借助LightSDK来处理用户会话信息

  1. 引入LightSDK

    https://res.lightyy.com/sdk/light-sdk-1.0.0.js

  2. 获取用户信息

    LightSDK.account.userInfo(function (userInfo) {
    console.log(userInfo);
    // userInfo.open_id:用户在三方系统的业务id,全局可重复,以账户系统划分则不可重复
    });

会话接入服务端demo

下载地址:会话接入服务端demo

此demo基于nodejs,请先安装node环境。